package praca.impl;

import java.nio.FloatBuffer;
import java.nio.ShortBuffer;

import praca.framework.FPSCounter;
import praca.framework.MusicGL;
import praca.framework.TextureGL;
import praca.framework.TouchEventGL;
import praca.framework.Vertices;
import praca.interfejsy.Game;
import praca.interfejsy.Music;
import praca.interfejsy.Screen;
import praca.interfejsy.Texture;
import praca.interfejsy.TouchEvent;


public class Ex04Trolls extends Screen{

	Vertices vert = new Vertices(100,100, true);
	Texture texture;
	Troll[] trolls;
	Music music;
	float rotation = 0;
	TouchEvent event;
	final int NR_TROLLS = 100;
	FloatBuffer vertices;
	ShortBuffer indices;
	FPSCounter counter = new FPSCounter();
	
	public Ex04Trolls(Game game){
		super(game);

		trolls = new Troll[NR_TROLLS];
		for(int i = 0; i < NR_TROLLS; i++) {
			trolls[i] = new Troll(100,100);
		}

		

		/*
		 * Otwieranie muzyki - takiej grajacej w tle
		 * do tworzenia efektow dzwiekowych sluzy klasa SoundManager
		 * otwarcie pliku nie powoduje jeszcze jego odtworzenia
		 */
		music = new MusicGL(game, "trololo.ogg"); 
	}
	

	@Override
	public void update(float deltaTime) {

		g.drawColor(1,1, 1);//czyscimy ekran
		counter.logFrame();
		//mozna przesunac kazda teksture
		if(!in.getTouchEvents().isEmpty()){
				event = in.getTouchEvents().remove(in.getTouchEvents().size()-1);
					for(int j = 0; j < in.getTouchEvents().size(); j++){
						in.getTouchEvents().remove(in.getTouchEvents().size()-1);
					}

				
				if(event.getType() == TouchEventGL.TOUCH_DOWN){
					//Log.d("touch", "Touch down");
					for(int i = NR_TROLLS-1 ; i >= 0; i--){
						if(trolls[i].isInside(event.getX(), event.getY())){
							trolls[i].isTouched=true;
							break;
						}
					}
					
				}
				
				if(event.getType() == TouchEventGL.TOUCH_MOVE){
					//Log.d("touch", "Touch move");
					for(int i = NR_TROLLS-1 ; i >= 0; i--){
						if(trolls[i].isTouched){
							trolls[i].x = event.getX();
							trolls[i].y = event.getY();
							break;
						}
					}
				}
				
				if(event.getType() == TouchEventGL.TOUCH_UP){
					//Log.d("touch", "Touch up");
					if(event.getX() == -100 && event.getY()==-100)
						game.setCurrentScreen(new MenuScreen(game));
					
					for(int i = NR_TROLLS-1 ; i >= 0; i--){
						if(trolls[i].isTouched){
							trolls[i].isTouched=false;
							break;
						}
					}
				}
		}//koniec if
		
		/*
		 * Rysowanie kazdego trolla z tablicy to sekwencja tych samych czynnosci
		 */
		for(int i = 0 ; i < NR_TROLLS; i++){
			trolls[i].update(deltaTime);
				g.clearTransformations();
				g.moveTexture(trolls[i].x, trolls[i].y);
				g.rotateTexture(trolls[i].rotation);
				g.drawTexture(texture, vert);
		}
	}



	@Override
	public void pause() {
		music.pause();//pauzujemy muzyke
		
	}

	@Override
	public void resume() {
		//metoda wywolywana automatycznie podczas pierwszego uruchomienia aplikacji,
		//oraz przy wznawianiu po odblokowaniu telefonu lub przywroceniu aplikacji
		texture = new TextureGL(game, "troll.png");
		music.play(); // tutaj odtwarzamy dzwiek
		g.setTextureTransparentBackground();//ustawiamy przezroczyste tlo
		
	}




	@Override
	public void dispose() {
		music.stop();
	}

	

}
